#include <stdio.h> 
#include <stdlib.h>
#include <string.h>

int main()
{
    /*
    void* 指针
    1、不能自增自减
    2、不能偏移
    3、不能取内容

    //ANSI标准之所以这样认定，是因为它坚持：
    进行算法操作的指针必须是确定知道其指向数据类型大小的。
    但是 GNU 则不这么认定，它指定 void * 的算法操作与 char * 一致。
    因此下列语句在 GNU 编译器中皆正确
    void * pvoid;
    ((char *)pvoid)++; //ANSI：错误；GNU：正确
    (char *)pvoid += 1; //ANSI：错误；GNU：正确

    可以接收任何类型的指针而不需要强制类型
    */
    //void_val
    void* p_0=NULL;
    p_0=(void*)0X1324;
    printf("p_0:%p %0X %d\n",&p_0,p_0,p_0);

    printf("sizeof(void)=%d sizeof(p_0)=%d\n",sizeof(void),sizeof(p_0));
    printf("p_0:%0X %d %d\n",p_0+1,p_0+1);

    int num=300;
    int* p_1=NULL;
    p_1=&num;
    printf("p_1:%p %0X %d %d\n",&p_1,p_1,p_1,*p_1);
    
    int* p_2=(int*)0XCD00;
    printf("p_2:%X\n",p_2);  
    p_2++;
    printf("p_2:%X\n",p_2);


    p_0=p_1;
    printf("p_0:%p %0X %d %d\n",&p_0,p_0,p_0,*(int*)p_0);


	//system("pause");
	return 0;
} 